﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using Coffee_Restaurant.DAL;
using Coffee_Restaurant.Database;
using Coffee_Restaurant.Forms.Items;
using MetroFramework;
using MetroFramework.Controls;

namespace Coffee_Restaurant.Forms.DinnerMenus
{
    public partial class DinnerMenuManager : UserControl
    {
        private string _dinnerMenuIdSelect;
        public int IdCategory { get; set; }
        public DinnerMenuManager()
        {
            InitializeComponent();

        }

        #region event datagridview
        private void dataGridViewItems_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            UpdateItem();
        }

        /// <summary>
        /// select ItemId for edit and delete
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridViewItems_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //select header column thi index = -1 => exception
            if (e.RowIndex >= 0)
            {
                _dinnerMenuIdSelect = dataGridViewItems.Rows[e.RowIndex].Cells["ItemId"].Value.ToString();
            }
        }


        //event procees key data delete
        private void dataGridViewItems_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Delete)
            {
                DeleteRowItem();
            }
        }

        #endregion
        #region validate function datagridview

        public bool IsDecimals(int rowIndex, string inputData)
        {
            const string pattern = @"\d+";
            const RegexOptions regexOptions = RegexOptions.Singleline;
            var regex = new Regex(pattern, regexOptions);
            if (regex.IsMatch(inputData))
            {
                dataGridViewItems.Rows[rowIndex].ErrorText = null;
                return true;
            }
            dataGridViewItems.Rows[rowIndex].ErrorText = "Dữ liệu nhập vào là dạng số.";
            return false;
        }

        public bool IsString(int rowIndex, string inputData)
        {
            const string pattern = @"^[a-zA-Z0-9\s]+$";
            const RegexOptions regexOptions = RegexOptions.Singleline;
            var regex = new Regex(pattern, regexOptions);
            if (regex.IsMatch(inputData))
            {
                dataGridViewItems.Rows[rowIndex].ErrorText = null;
                return true;
            }
            dataGridViewItems.Rows[rowIndex].ErrorText = "Dữ liệu nhập vào là ký tự và số.";
            return false;
        }


        public bool IsValidLength(int rowIndex, string inputData)
        {
            if (inputData.Length > 0)
            {
                dataGridViewItems.Rows[rowIndex].ErrorText = null;
                return true;
            }
            dataGridViewItems.Rows[rowIndex].ErrorText = "Dữ liệu nhập vào là ký tự và số.";
            return false;
        }
        #endregion
        #region function update delete add


        public void ReloadDataGridview()
        {
            LoadDinnerMenu(null);
        }
        void frmAdd_BtnSave()
        {
            LoadDinnerMenu(null);
        }
        private void UpdateItem()
        {
            if (!string.IsNullOrEmpty(_dinnerMenuIdSelect))
            {
                using (var db = new DatabaseEntities())
                {
                    //tim kiem theo ten ban
                    var idConvert = Int32.Parse(_dinnerMenuIdSelect);
                    var model = db.Items.FirstOrDefault(t => t.ItemId == idConvert);
                    if (model != null)
                    {
                        var frmUpdate = new UpdateItem
                        {
                            ItemIdSelect = idConvert,
                            cbbCategory = { SelectedValue = model.ItemCategoriesId },
                            cbbDVT = { SelectedValue = model.Unit },
                            txtName = { Text = model.Name },
                            txtPrice = { Text = model.Price.ToString() },
                        };

                        frmUpdate.BtnSave += ReloadDataGridview;
                        frmUpdate.ShowDialog();
                    }
                }
            }
            else
            {
                CustomMessageBox.Show("Bạn chưa chọn mặt hàng cần xóa", "Thông báo", "alert", MetroColorStyle.Default);
            }
        }

        private void DeleteRowItem()
        {
            if (!string.IsNullOrEmpty(_dinnerMenuIdSelect))
            {
                DialogResult dialogResult = CustomMessageBox.Show("Bạn thật sự muốn xóa mặt hàng này", "Xác nhận", "confirm", MetroColorStyle.Red);
                if (dialogResult == DialogResult.Yes)
                {
                    var itemDa = new ItemDa();
                    if (itemDa.Delete(Int32.Parse(_dinnerMenuIdSelect)) > 0)
                    {
                        LoadCategoryItems();
                        LoadDinnerMenu(null);
                    }
                }

            }
            else
            {
                CustomMessageBox.Show("Bạn chưa chọn mặt hàng cần xóa", "Thông báo", "alert", MetroColorStyle.Default);
            }
        }


        public void SearchByKey(string keyword)
        {
            using (var db = new DatabaseEntities())
            {
                //clear trc khi load
                dataGridViewItems.Rows.Clear();
                //mac dinh la load tat ca
                var model = db.DinnerMenus.ToList();
                if (!string.IsNullOrEmpty(keyword))
                {
                    model = db.DinnerMenus.Where(x => x.Name.Contains(keyword)).ToList();
                }
                BindDataGridView(model);
            }
        }

        public void LoadDinnerMenu(string id)
        {
            using (var db = new DatabaseEntities())
            {

                //mac dinh la load tat ca
                var model = db.DinnerMenus.ToList();
                if (id != null)
                {
                    //neu truyen vao id thi load theo id
                    model = db.DinnerMenus.Where(t => t.GroupName == id).ToList();
                }
                BindDataGridView(model);
            }

        }

        //truyen model vao roi load len data gridview
        public void BindDataGridView(List<DinnerMenu> list)
        {
            //clear trc khi load
            dataGridViewItems.Rows.Clear();
            for (int i = 0; i < list.Count; i++)
            {
                var item = list[i];
                var row = new object[dataGridViewItems.ColumnCount];
                row[0] = i + 1;
                row[1] = item.Code;
                row[2] = item.Name;
                row[3] = item.Unit;
                row[4] = item.Price;
                row[5] = item.Price2;
                row[6] = item.Price3;
                row[7] = item.Tag;
                row[8] = item.GroupName;
                row[9] = item.DinnerMenuId;
                dataGridViewItems.Rows.Insert(i, row);
            }
            dataGridViewItems.ClearSelection(); // disable auto selected row
        }

        public void LoadCategoryItems()
        {
            using (var db = new DatabaseEntities())
            {
                var model = db.sp_DinnerMenuCategories().ToList();
                var sumCount = db.DinnerMenus.Count();
                treeViewItemCategory.Nodes.Clear();
                treeViewItemCategory.Nodes.Add("0", "Tất cả (" + sumCount + ")");
                foreach (var itemc in model)
                {
                    treeViewItemCategory.Nodes.Add(itemc.Name, itemc.Name + " (" + itemc.CountItems + ")");
                }
            }
        }

        private void UpdateCategoryItem()
        {
            if (!string.IsNullOrEmpty(GroupNameSelected))
            {
                using (var db = new DatabaseEntities())
                {
                    //tim kiem theo ten ban
                    var model = db.DinnerMenuCategories.FirstOrDefault(x => x.Name == GroupNameSelected);
                    if (model != null)
                    {
                        var frmUpdate = new UpdateCategoryMenu()
                        {
                            GroupNameSelected = GroupNameSelected,
                            txtName = { Text = model.Name },
                            txtDescription = { Text = model.Description },
                        };

                        frmUpdate.BtnSave += FrmUpdateOnBtnSave;
                        frmUpdate.ShowDialog();
                    }
                }
            }
            else
            {
                CustomMessageBox.Show("Bạn chưa chọn mặt hàng cần xóa", "Thông báo", "alert", MetroColorStyle.Default);
            }
        }

        private void FrmUpdateOnBtnSave(string id, string name)
        {
            LoadCategoryItems();
        }

        private void DeleteCategory()
        {
            if (!string.IsNullOrEmpty(GroupNameSelected))
            {
                DialogResult dialogResult;
                int count = DinnerMenuCategoryDa.CountRef(GroupNameSelected);
                if (count > 0)
                {
                    dialogResult = CustomMessageBox.Show("Nhóm này đang chứa (" + count + ") thực đơn. Bạn thật sự muốn xóa tất cả", "Xác nhận", "confirm", MetroColorStyle.Red);
                }
                else
                {
                    dialogResult = CustomMessageBox.Show("Bạn thật sự muốn xóa nhóm thực đơn này", "Xác nhận", "confirm", MetroColorStyle.Red);

                }
                if (dialogResult == DialogResult.Yes)
                {
                    if (DinnerMenuCategoryDa.DeleteByName(GroupNameSelected) > 0)
                    {
                        //remove node tree
                        treeViewItemCategory.Nodes[GroupNameSelected].Remove();
                    }
                }

            }
            else
            {
                CustomMessageBox.Show("Bạn chưa chọn mặt hàng cần xóa", "Thông báo", "alert", MetroColorStyle.Default);
            }
        }
        #endregion
        #region xuatnhatkho event button

        //private void btnImport_Click(object sender, EventArgs e)
        //{
        //    if (!string.IsNullOrEmpty(_dinnerMenuIdSelect))
        //    {
        //        using (var db = new DatabaseEntities())
        //        {
        //            var idConvert = Int32.Parse(_dinnerMenuIdSelect);
        //            var model = db.Items.FirstOrDefault(t => t.ItemId == idConvert);
        //            if (model != null)
        //            {
        //                var importWarehouse = new ImportItem()
        //                {
        //                    lblItemName = { Text = model.Name },
        //                    lblDVT = { Text = model.Unit },
        //                    ItemIdSelect = model.ItemId,
        //                    txtPrice = { Text = model.Price.ToString() },
        //                };
        //                importWarehouse.BtnImport += ReloadDataGridview;
        //                importWarehouse.ShowDialog();
        //            }
        //        }
        //    }
        //    else
        //    {
        //        CustomMessageBox.Show("Bạn chưa chọn mặt hàng cần thao tác", "", "alert", MetroColorStyle.Default);
        //    }
        //}


        //private void btnExport_Click(object sender, EventArgs e)
        //{
        //    if (!string.IsNullOrEmpty(_dinnerMenuIdSelect))
        //    {
        //        using (var db = new DatabaseEntities())
        //        {
        //            var idConvert = Int32.Parse(_dinnerMenuIdSelect);
        //            var model = db.Items.FirstOrDefault(t => t.ItemId == idConvert);
        //            if (model != null)
        //            {
        //                var exportItem = new ExportItem()
        //                {
        //                    lblItemName = { Text = model.Name },
        //                    lblDVT = { Text = model.Unit },
        //                    ItemIdSelect = model.ItemId,
        //                    txtPrice = { Text = model.Price.ToString() },
        //                };
        //                exportItem.BtnExport += ReloadDataGridview;
        //                exportItem.ShowDialog();
        //            }
        //        }
        //    }
        //    else
        //    {
        //        CustomMessageBox.Show("Bạn chưa chọn mặt hàng cần thao tác", "", "alert", MetroColorStyle.Default);
        //    }

        //}

        #endregion
        #region event toolstripmenu



        private void toolStripMenuItemAdd_Click(object sender, EventArgs e)
        {
            var frmAdd = new AddDinnerMenu();
            frmAdd.BtnSave += frmAdd_BtnSave;
            frmAdd.ShowDialog();
        }


        private void sửaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            UpdateItem();

        }

        private void toolStripMenuItemLoadItems_Click(object sender, EventArgs e)
        {
            LoadDinnerMenu(null);
        }

        //menu strip delete row
        private void toolStripMenuItemDelete_Click(object sender, EventArgs e)
        {
            DeleteRowItem();
        }

        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            LoadCategoryItems();
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var frmAdd = new AddCategoryMenu();
            frmAdd.BtnSave += LoadCategoryItems;
            frmAdd.ShowDialog();
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            DeleteCategory();
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            UpdateCategoryItem();
        }

        #endregion

        private void treeViewItemCategory_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Delete)
            {
                DeleteCategory();
            }
        }
        //tim kiem
        public void txtKeyword_TextChanged(object sender, EventArgs e)
        {
            var textbox = sender as MetroTextBox;
            if (textbox != null) SearchByKey(textbox.Text);
        }

        #region event treeview
        public void treeViewCategory_AfterSelect(object sender, TreeViewEventArgs e)
        {
            GroupNameSelected = treeViewItemCategory.Nodes[e.Node.Index].Name;
            if (GroupNameSelected.Contains("0"))
                GroupNameSelected = null;
            if (string.IsNullOrEmpty(GroupNameSelected))
                LoadDinnerMenu(null);
            else
                LoadDinnerMenu(GroupNameSelected);
        }
        #endregion
        public string GroupNameSelected { get; set; }

    }
}
